<?php

namespace Api\Pay;

use Base\Exception\Data as Exception;

/**
 * Class Contract
 * @package Api\Pay
 * @description 签约服务
 */
class Contract extends Base {

    const URI_SIGN_SINGLE = "/contract/sign";  //签约-单笔
    const URI_CHECK = "/contract/check";  //签约查询

    const ERR_CODE_DUPLICATE_SIGN = '5050001';  //重复签约错误码

    /**
     * 证件类型
     */
    const CERT_TYPE_ID_CARD = "01";  //身份证
    /**
     * 账户类型
     *
     * 0-对私
     * 1-对公
     */
    const ACCT_TYPE_PERSONAL = 0;
    const ACCT_TYPE_ORG = 1;
    /**
     * 卡类型
     */
    const CARD_TYPE_DEBIT = 0;  //借记卡(默认)
    const CARD_TYPE_DEPOSIT_BOOK = 1;  //存折
    const CARD_TYPE_CREDIT = 2;  //贷记卡
    const CARD_TYPE_ORG_ACCT = 3;  //公司账号

    /**
     * 签约-单笔
     *
     * @param string $appkey 应用appkey
     * @param string $inner_mer_id 内部商户号
     * @param string $uid 用户uid
     * @param string $card_no 签约卡号
     * @param string $cert_type 01-身份证
     * @param string $cert_no 证件号码
     * @param string $name 用户姓名
     * @param int $acct_type default 0 账户类型 0-对私 1-对公
     * @param int $card_type default 0 卡类型 0-借记卡 1-存在 2-贷记卡 3-公司账号
     * @param string $bank_mobile default null 银行预留手机
     * @param string $user_mobile default null 用户手机号码
     * @param string $file_url default null 签约文件oss url
     * @param array $options default array() 签约选项参数
     *
     * @return bool true-签约成功 false-签约失败
     */
    public function sign($appkey, $inner_mer_id, $uid, $card_no, $cert_type, $cert_no, $name,
                         $acct_type = self::ACCT_TYPE_PERSONAL, $card_type = self::CARD_TYPE_DEBIT,
                         $bank_mobile = null, $user_mobile = null, $file_url = null, array $options = array()) {
        $params = array(
            "mer_id" => $inner_mer_id,
            "uid" => $uid,
            "card_no" => $card_no,
            "cert_type" => $cert_type,
            "cert_no" => $cert_no,
            "name" => $name,
            "acct_type" => $acct_type,
            "card_type" => $card_type,
            "bank_mobile" => $bank_mobile,
            "user_mobile" => $user_mobile,
            "file_url" => $file_url,
            "options" => json_encode($options),
        );

        $resp_data = $this->request($appkey, self::URI_SIGN_SINGLE, $params, 60000);
        /**
         * 重复签约认为成功
         */
        return (($resp_data && $resp_data["result"]) || (self::ERR_CODE_DUPLICATE_SIGN == $this->_err_code));
    }

    /**
     * 签约查询
     *
     * @param string $appkey 应用appkey
     * @param string $inner_mer_id 内部商户号
     * @param string $card_no 签约卡号
     *
     * @return bool true-已签约 false-未签约
     * @throws \Base\Exception\Data
     */
    public function check($appkey, $inner_mer_id, $card_no) {
        $params = array(
            "mer_id" => $inner_mer_id,
            "card_no" => $card_no,
        );

        $resp_data = $this->request($appkey, self::URI_CHECK, $params);
        if (!$resp_data) {
            throw new Exception($this->_err_msg, $this->_err_code);
        }

        return $resp_data["result"];
    }

} 